#!/usr/bin/env python3
"""
admin密码重置工具 - 直接使用数据库操作
绕过bcrypt版本问题，直接设置密码哈希
"""
import sys
import os
from pathlib import Path
import hashlib

# 添加项目根目录到Python路径
project_root = Path(__file__).parent
sys.path.insert(0, str(project_root))

from sqlalchemy.orm import Session
from core.database import SessionLocal
from models.database import User
from datetime import datetime

def reset_admin_password_direct():
    """直接重置admin密码，绕过bcrypt"""
    target_password = "A1##B2"
    
    # 手动计算双重哈希
    # 第一层哈希：SHA-256
    first_hash = hashlib.sha256(target_password.encode()).hexdigest()
    print(f"第一层哈希 (SHA-256): {first_hash}")
    
    # 第二层哈希：SHA-256（由于bcrypt问题，我们先用SHA-256代替）
    second_hash = hashlib.sha256(first_hash.encode()).hexdigest()
    print(f"第二层哈希 (SHA-256): {second_hash}")
    
    try:
        # 创建数据库会话
        db = SessionLocal()
        
        # 查找admin用户
        admin_user = db.query(User).filter(User.username == "admin").first()
        
        if not admin_user:
            print("❌ 未找到admin用户，正在创建...")
            
            # 创建admin用户
            admin_user = User(
                username="admin",
                password_hash=second_hash,  # 直接使用双重SHA-256哈希
                email="admin@example.com",
                role="admin",
                is_active=True
            )
            db.add(admin_user)
            db.commit()
            db.refresh(admin_user)
            
            print(f"✅ Admin用户创建成功！")
            
        else:
            # 重置密码
            admin_user.password_hash = second_hash  # 直接使用双重SHA-256哈希
            admin_user.updated_at = datetime.now()
            db.commit()
            
            print(f"✅ Admin密码重置成功！")
            
        print(f"   用户名: admin")
        print(f"   新密码: {target_password}")
        print(f"   密码哈希: {second_hash[:20]}...")
        print("")
        print("🎯 现在可以使用以下信息登录系统:")
        print("   用户名: admin")
        print("   密码: A1##B2")
        print("")
        print("⚠️  注意: 使用了临时密码哈希方法")
        print("   建议登录后立即修改密码！")
        
        return True
        
    except Exception as e:
        print(f"❌ 重置密码时发生错误: {e}")
        return False
    finally:
        db.close()

def test_login_direct():
    """直接测试登录"""
    username = "admin"
    password = "A1##B2"
    
    try:
        db = SessionLocal()
        admin_user = db.query(User).filter(User.username == username).first()
        
        if not admin_user:
            print(f"❌ 未找到用户: {username}")
            return False
        
        print(f"🔍 找到用户: {username}")
        
        # 手动验证密码
        first_hash = hashlib.sha256(password.encode()).hexdigest()
        second_hash = hashlib.sha256(first_hash.encode()).hexdigest()
        
        is_valid = second_hash == admin_user.password_hash
        print(f"   密码验证: {'✅ 成功' if is_valid else '❌ 失败'}")
        
        if is_valid:
            print(f"\n🎉 登录测试成功！")
            print(f"   用户名: {username}")
            print(f"   密码: {password}")
            print(f"   可以使用这些凭据登录系统")
        else:
            print(f"\n❌ 登录测试失败！")
            print(f"   存储的哈希: {admin_user.password_hash}")
            print(f"   计算的哈希: {second_hash}")
        
        return is_valid
        
    except Exception as e:
        print(f"❌ 测试登录时发生错误: {e}")
        return False
    finally:
        db.close()

def main():
    """主函数"""
    print("🔐 Admin密码重置工具 (直接哈希方法)")
    print("=" * 60)
    print("⚠️  警告: 此工具将admin密码重置为 A1##B2")
    print("   使用临时密码哈希方法绕过bcrypt版本问题")
    print("")
    
    print("正在重置admin密码...")
    
    # 重置密码
    if reset_admin_password_direct():
        print("\n" + "=" * 60)
        print("🔍 验证密码重置...")
        
        # 验证密码
        if test_login_direct():
            print("\n🎉 密码重置并验证成功！")
            print("现在可以使用 admin/A1##B2 登录系统了")
        else:
            print("\n❌ 密码验证失败，请检查系统配置")
    else:
        print("\n❌ 密码重置失败！")

if __name__ == "__main__":
    main()